#pragma once
#ifndef __QUEUE_H__
#define __QUEUE_H__

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SZ 256

#pragma once
#define null NULL

/* 封装队列节点中的数据类型，可以为任意类型 */
#define queueNode void

/* 定义声明队列中节点的结构 */
typedef struct _tag_queueNode
{
    queueNode *qnode;            // 指针变量，指向霍夫曼树的节点
    unsigned int priority;       // 霍夫曼节点中记录的字符出现的次数，优先级，只能是大于0
    struct _tag_queueNode *next; // 下一个节点，形成一个链式结构
} pQueueNode;

/* 定义声明队列的结构 */
typedef struct _pQueue
{
    unsigned int count; // 队列元素的记录
    pQueueNode *node;   // 队列中的节点
} pQueue;

typedef struct __func_queue
{
    pQueue *(*create)();
    int (*push)(pQueue **, queueNode *, unsigned int);
    queueNode *(*pop)(pQueue **);
    void (*destory)(pQueue *);
} func_queue;

extern func_queue fqueue;

#endif
